import axios from 'axios';
import adapter from 'axios-miniprogram-adapter';
import QS from 'qs'; // 引入qs模块，用来序列化post类型的数据，后面会提到

import errorCode from '@/utils/errorCode'

// axios.defaults.baseURL = "http://8.130.170.156:80/wxapi";
// axios.defaults.baseURL = "http://www.k12code.net:80/wxapi";
axios.defaults.adapter = adapter;
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'

// 创建axios实例
const service = axios.create({
	// axios中请求配置有baseURL选项，表示请求URL公共部分
	//baseURL: "http://localhost:8080/wxapi",
	baseURL: "https://www.ym-cloud.cn/wxapi",
	// 超时
	timeout: 20000,
})

//请求拦截器
service.interceptors.request.use(function(config) {
	//在发送请求前
	const token = uni.getStorageSync('token');
	const shop = uni.getStorageSync('shop');
	/**
	 * 所有请求必须在选完门店之后才能发出，否则取消
	 * config.access 自行设置=true 或 不设置=undefined，为true则表示无条件发出请求
	 */
	if(!shop && !config.access) {
		let cancel;
		config.cancelToken = new axios.CancelToken(c => {
			cancel = c;
		})
		cancel();
		uni.navigateTo({
			url: '/pages/shop/first_shop'
		})
	}
	// console.log("shopId", shopId)
	// console.log("token", token)
	if (config.method === 'get' && !config.params) {
		config.params = {};
	}
	// 添加请求头
	if (token) {
		config.headers['Authorization'] = `Bearer ${token}`
	}
	if (config.method == 'get' && shop) {
		config.params['shopId'] = shop.id;
	}
	
	if ((config.method === 'post' || config.method === 'put')) {
	}
	return config;
}, function(error) {
	//请求错误
	return Promise.reject(error)
});

// 响应拦截器
service.interceptors.response.use(res => {
		// 未设置状态码则默认成功状态
		const code = res.data.code || 200;
		// 获取错误信息
		const msg = errorCode[code] || res.data.msg || errorCode['default']
		// 二进制数据则直接返回
		if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
			return res.data
		}
		if (code === 401) {
			uni.navigateTo({
				url: '/pages/login/login'
			})
			return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
		} else if (code === 500) {
			return Promise.reject('服务器发生异常：' + new Error(msg))
		} else if (code === 601) {
			return Promise.reject('error')
		} else if (code !== 200) {
			return Promise.reject('error')
		} else {
			return res.data
		}
	},
	error => {
		console.log('err' + error)
		return Promise.reject(error)
	}
)

export default service

// /** 
//  * get方法，对应get请求 
//  * @param {String} url [请求的url地址] 
//  * @param {Object} params [请求时携带的参数] 
//  */
// export function get(url, params) {
// 	return new Promise((resolve, reject) => {
// 		axios.get(url, {
// 				params: params
// 			})
// 			.then(res => {
// 				resolve(res.data);
// 			})
// 			.catch(err => {
// 				reject(err.data);
// 			})
// 	});
// }
// /** 
//  * post方法，对应post请求 
//  * @param {String} url [请求的url地址] 
//  * @param {Object} params [请求时携带的参数] 
//  */
// export function post(url, params) {
// 	console.log(params)
// 	return new Promise((resolve, reject) => {
// 		axios.post(url, QS.stringify(params))
// 			.then(res => {
// 				resolve(res.data);
// 			})
// 			// .catch(err => {
// 			// 	reject(err.data);
// 			// })
// 	});
// }